home *** CD-ROM | disk | FTP | other *** search
/ The AGA Experience 3 / AGA Experience Volume 3 (1997)(NFA - SAdENESS)[!].iso / software / utilities / demos / ged451 / install.run / GOLDEDDATA / developer / api / include / api.h
Encoding:
C/C++ Source or Header  |  1996-12-29  |  10.2 KB  |  271 lines

  1. #ifndef API_H
  2. #define API_H
  3. /*
  4. **      $Filename: fd/api.h
  5. **      $Release: 7
  6. **
  7. **      API-2 definitions.
  8. **
  9. **      (C) Copyright 1996 Dietmar Eilert
  10. **          All Rights Reserved
  11. */
  12.  
  13. #ifndef EXEC_TYPES_H
  14. #include <exec/types.h>
  15. #endif
  16.  
  17. #ifndef EXEC_LISTS_H
  18. #include <exec/lists.h>
  19. #endif
  20.  
  21. #ifndef EXEC_LISTS_H
  22. #include <exec/lists.h>
  23. #endif
  24.  
  25. #ifndef INTUITION_INTUITION_H
  26. #include <intuition/intuition.h>
  27. #endif
  28.  
  29. #ifndef UTILITY_TAGITEM_H
  30. #include <utility/tagitem.h>
  31. #endif
  32.  
  33. #ifndef WORKBENCH_WORKBENCH_H
  34. #include <workbench/workbench.h>
  35. #endif
  36.  
  37. #ifndef MAKE_ID
  38. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  39. #endif
  40.  
  41. #define API_MAGIC  MAKE_ID('A','P','I','2')
  42.  
  43. /* library base */
  44.  
  45. struct APIBase {
  46.  
  47.     struct Library  Library;                         /* standard library */
  48.     UWORD           pad;                             /* we are now longwod aligned */
  49.     ULONG           Magic;                           /* used to recognize API libraries */
  50. };
  51.  
  52.  
  53. /* -------------------------------- APIMessage ---------------------------------
  54.  
  55.  API messages are sent from a host (or an instance of the host)  to  clients.
  56.  API messages are linked (api_Next; may be NULL). The client has to check the
  57.  api_State field before processing the message  (must  be  API_STATE_NOTIFY).
  58.  Check  the  api_Class  field  to  determine  the  basic  message  type (e.g.
  59.  API_CLASS_SCREEN if the message is related to screen  handling).  Check  the
  60.  api_Action  field  to  determine the actual command (e.g. API_ACTION_HIDE if
  61.  the host wants you to close  your  windows).  A  client  should  update  the
  62.  api_Error field after having processed the message.
  63.  
  64. */
  65.  
  66. struct APIMessage {
  67.  
  68.     /* info slots (read-only) */
  69.  
  70.     ULONG                     api_State;             /* set by host: API message state (see below) */
  71.     struct APIMessage        *api_Next;              /* set by host: next APIMessage */
  72.     struct APIInstance       *api_Instance;          /* set by host: sender (instance of host) */
  73.  
  74.     /* command slots */
  75.  
  76.     ULONG                     api_Class;             /* set by host: notify class (see below) */
  77.     ULONG                     api_Action;            /* set by host: notify code  (see below) */
  78.     ULONG                     api_Qualifier;         /* set by host: intuition qualifier of last input event */
  79.     APTR                      api_Data;              /* set by host: all-purpose slot; usage depends on api_Class */
  80.     UBYTE                    *api_Command;           /* set by host: command string passed to client (read-only), command part uppercase */
  81.  
  82.     /* return code slots */
  83.  
  84.     LONG                      api_RC;                /* set by client: client's primary return code */
  85.     UBYTE                    *api_CommandResult;     /* set by client: command result string */
  86.     UBYTE                    *api_CommandError;      /* set by client: command error  string */
  87.     ULONG                     api_Error;             /* set by client: return code (see below) */
  88.     ULONG                     api_Refresh;           /* set by client: display refresh request */
  89.     struct APIOrder          *api_Order;             /* set by client: orders (depends on command set of host) */
  90.     UBYTE                    *api_Status;            /* set by client: status message */
  91. };
  92.  
  93.  
  94. /* supported api_State values */
  95.  
  96. #define API_STATE_IGNORE      0                      /* this messages should be ignored */
  97. #define API_STATE_NOTIFY      1                      /* this is a standard notify message */
  98. #define API_STATE_CONSUMED    2                      /* message consumed; won't be passed to other clients */
  99.  
  100.  
  101. /* api action classes */
  102.  
  103. #define API_CLASS_SCREEN      (1L<<1)                /* screen handling  */
  104. #define API_CLASS_KEY         (1L<<2)                /* keyboard event */
  105. #define API_CLASS_COMMAND     (1L<<3)                /* command event */
  106. #define API_CLASS_MOUSE       (1L<<4)                /* mouseclick event */
  107. #define API_CLASS_REFRESH     (1L<<5)                /* refresh request  */
  108. #define API_CLASS_SYSTEM      (1L<<6)                /* notifies */
  109. #define API_CLASS_IO          (1L<<7)                /* IO */
  110.  
  111.  
  112. /* Supported api_Action values for API_CLASS_KEY */
  113.  
  114. #define API_ACTION_VANILLAKEY 1                      /* vanillakey event; key code passed in api_Data */
  115. #define API_ACTION_RAWKEY     2                      /* rawkey event; key code passed in api_Data */
  116.  
  117.  
  118. /* Supported api_Action values for API_CLASS_SCREEN */
  119.  
  120. #define API_ACTION_HIDE       1                      /* close your window(s) - host will close display */
  121. #define API_ACTION_SHOW       2                      /* open  your window(s) - host display available */
  122.  
  123.  
  124. /* Supported api_Action values for API_CLASS_COMMAND */
  125.  
  126. #define API_ACTION_COMMAND    1                      /* command passed to client (api_Command) */
  127.  
  128.  
  129. /* Supported api_Action values for API_CLASS_MOUSE */
  130.  
  131. #define API_ACTION_CLICK      1                      /* mouse click into client area (api_Data points to coordinates) */
  132.  
  133.  
  134. /* Supported api_Action values for API_CLASS_REFRESH */
  135.  
  136. #define API_ACTION_RESIZED    1                      /* client area has been resized */
  137.  
  138.  
  139. /* Supported api_Action values for API_CLASS_SYSTEM */
  140.  
  141. #define API_ACTION_WELCOME    1                      /* start client */
  142. #define API_ACTION_EXIT       2                      /* host requests client to quit */
  143.  
  144. /* Supported api_Action values for API_CLASS_IO */
  145.  
  146. #define API_ACTION_SAVE       1                      /* save file  (file name in api_Data) */
  147. #define API_ACTION_CREATED    2                      /* file saved (file name in api_Data) */
  148. #define API_ACTION_READ       4                      /* file read  (file name in api_Data) */
  149.  
  150. /* Supported api_Error values - set by client */
  151.  
  152. #define API_ERROR_OK          0                      /* notify successfully processed */
  153. #define API_ERROR_FAIL        1                      /* processing of notify failed */
  154. #define API_ERROR_UNKNOWN     2                      /* unknown api_Code/api_Class detected */
  155.  
  156.  
  157. /* supported refresh types (api_Refresh) - requested by client */
  158.  
  159. #define API_REFRESH_DISPLAY   (1L<<1)                /* redraw display         */
  160. #define API_REFRESH_LINE      (1L<<2)                /* redraw current line    */
  161. #define API_REFRESH_SYNC      (1L<<3)                /* sync view              */
  162. #define API_REFRESH_NOMARKER  (1L<<4)                /* hide selection         */
  163. #define API_REFRESH_MARKER    (1L<<8)                /* refresh marker         */
  164.  
  165.  
  166. /* ---------------------------------- APIHost ----------------------------------
  167.  
  168.  Host description (read-only): provided by host
  169.  
  170. */
  171.  
  172. struct APIHost {
  173.  
  174.     ULONG                     api_APIVersion;        /* interface standard supported by host */
  175.     ULONG                     api_Version;           /* release code */
  176.     ULONG                     api_Serial;            /* serial code of host */
  177.     UBYTE                    *api_Name;              /* application name */
  178.     UBYTE                    *api_Info;              /* application info */
  179.     APTR                      api_Environment;       /* configuration (host-specific) */
  180.  
  181.     /* private data may follow (depends on host) */
  182. };
  183.  
  184. #define API_INTERFACE_VERSION 3
  185.  
  186.  
  187. /* -------------------------------- APIInstance --------------------------------
  188.  
  189.  Instance description (read-only): provided by host.
  190.  
  191. */
  192.  
  193. struct APIInstance {
  194.  
  195.     struct APIHost           *api_Host;              /* host application */
  196.     UBYTE                    *api_Name;              /* instance name */
  197.     APTR                      api_Environment;       /* configuration (host-specific) */
  198.     struct Screen            *api_Screen;            /* screen used by instance */
  199.     struct Window            *api_Window;            /* window used by instance */
  200.     struct APIContainer      *api_Area;              /* reserved area provided by instance */
  201.  
  202.     /* private data may follow (depends on host) */
  203. };
  204.  
  205.  
  206. /* --------------------------------- APIClient ---------------------------------
  207.  
  208.  Client description (read-only): provided by client
  209.  
  210. */
  211.  
  212.  
  213. struct APIClient {
  214.  
  215.     ULONG                     api_APIVersion;        /* interface standard supported by client */
  216.     ULONG                     api_Version;           /* release code */
  217.     UBYTE                    *api_Name;              /* client name */
  218.     UBYTE                    *api_Info;              /* client info */
  219.     UBYTE                   **api_Commands;          /* command list (NULL-terminated) */
  220.     ULONG                     api_Serial;            /* serial code of client */
  221.     ULONG                     api_Classes;           /* class request */
  222.     struct APIContainer      *api_Area;              /* area request */
  223.  
  224.     /* private data may follow (depends on client) */
  225. };
  226.  
  227.  
  228. /* ------------------------------------ APIOrder -------------------------------
  229.  
  230.  Orders (host-specific) are created by clients and attached to APIMessages
  231.  
  232. */
  233.  
  234.  
  235. struct APIOrder {
  236.  
  237.     struct APIOrder          *api_Next;              /* next order or NULL */
  238.     APTR                      api_Data;              /* host-specific data */
  239.  
  240.     /* more data may follow */
  241. };
  242.  
  243.  
  244. /* ------------------------------- APIContainer --------------------------------
  245.  
  246.  Reserved area provided by instance, controlled by client (numeric values are
  247.  overridden by alignment flags)
  248.  
  249. */
  250.  
  251. struct APIContainer {
  252.  
  253.     struct Window            *api_Window;            /* window   */
  254.     struct Screen            *api_Screen;            /* screen   */
  255.     struct RastPort          *api_Rast;              /* rastport */
  256.     UWORD                    *api_Align;             /* alignment flags */
  257.     UWORD                    *api_Left;              /* dimensions */
  258.     UWORD                    *api_Top;               /* dimensions */
  259.     UWORD                    *api_Width;             /* dimensions */
  260.     UWORD                    *api_Height;            /* dimensions */
  261. };
  262.  
  263. #define API_CONTAINER_ALIGN_TOP         0            /* alignment flag */
  264. #define API_CONTAINER_ALIGN_BOTTOM      1            /* alignment flag */
  265. #define API_CONTAINER_ALIGN_LEFT        2            /* alignment flag */
  266. #define API_CONTAINER_ALIGN_RIGHT       4            /* alignment flag */
  267. #define API_CONTAINER_ALIGN_RELWIDTH    8            /* alignment flag */
  268. #define API_CONTAINER_ALIGN_RELHEIGHT   16           /* alignment flag */
  269.  
  270. #endif
  271.